<template>
  <view class="order-submission">
    <view class="allAddress" :style="systemStore ? '' : 'padding-top: 0.2*100rpx'">
      <view class="nav acea-row">
        <view class="item font-color-red" :class="shipping_type === 0 ? 'on' : 'on2'" @click="addressType(0)"
          v-if="systemStore"></view>
        <view class="item font-color-red" :class="shipping_type === 1 ? 'on' : 'on2'" @click="addressType(1)"
          v-if="systemStore"></view>
      </view>
      <view class="address acea-row row-between-wrapper" v-if="shipping_type === 0" @click="addressTap">
        <view class="addressCon" v-if="addressInfo.realName">
          <view class="name">
            {{ addressInfo.realName }}
            <text class="phone">{{ addressInfo.phone }}</text>
          </view>
          <view>
            <text class="default font-color-red" v-if="addressInfo.isDefault">[默认]</text>
            {{ addressInfo.province }}{{ addressInfo.city}}{{ addressInfo.district }}{{ addressInfo.detail }}
          </view>
        </view>
        <view class="addressCon" v-else>
          <view class="setaddress">设置收货地址</view>
        </view>
        <view class="iconfont icon-jiantou"></view>
      </view>
      <div class="address acea-row row-between-wrapper" v-if="shipping_type === 1" @click="showStoreList">
        <div class="addressCon" v-if="storeItems">
          <div class="name">
            {{ storeItems.name }}
            <span class="phone">{{storeItems.phone }}</span>
          </div>
          <div>{{ storeItems.address}}</div>
        </div>
        <div class="addressCon" v-else>
          <div class="name">
            {{ systemStore.name }}
            <span class="phone">{{systemStore.phone}}</span>
          </div>
          <div>{{ systemStore.address }}</div>
        </div>
        <div class="iconfont icon-jiantou"></div>
      </div>
      <view class="line">
        <image src="@/static/images/line.jpg" />
      </view>
    </view>
    <OrderGoods :evaluate="0" :cartInfo="orderGroupInfo.cartInfo"></OrderGoods>
    <view class="wrapper">
      <view class="item acea-row row-between-wrapper" @click="couponTap" v-if="deduction === false">
        <view>优惠券</view>
        <view class="discount">
          {{ usableCoupon.couponTitle || "请选择" }}
          <text class="iconfont icon-jiantou"></text>
        </view>
      </view>
      <view class="item acea-row row-between-wrapper" v-if="deduction === false && enableIntegral === true">
        <view>积分抵扣</view>
        <view class="discount">
          <view class="select-btn">
            <view class="checkbox-wrapper">
              <!-- <input type="checkbox" v-model="useIntegral" @click="changeUseIntegral"/> -->
              <checkbox-group @change="changeUseIntegral">
                <label class="well-check">
                  <text class="integral">
                    当前积分
                    <text class="num font-color-red">{{ userInfo.integral || 0 }}</text>
                  </text>
                  <checkbox value="true" :checked="useIntegral ? true : false"></checkbox>
                </label>
              </checkbox-group>
            </view>
          </view>
        </view>
      </view>
      <view class="item acea-row row-between-wrapper" v-if="shipping_type === 0">
        <view>快递费用</view>
        <view class="discount">
          {{
          orderGroupInfo.priceGroup.storePostage > 0
          ? orderGroupInfo.priceGroup.storePostage
          : "免运费"
          }}
        </view>
      </view>
      <view v-if="shipping_type === 1">
        <view class="item acea-row row-between-wrapper">
          <view>联系人</view>
          <view class="discount">
            <input type="text" placeholder="请填写您的联系姓名" v-model="contacts" />
          </view>
        </view>
        <view class="item acea-row row-between-wrapper">
          <view>联系电话</view>
          <view class="discount">
            <input type="text" placeholder="请填写您的联系电话" v-model="contactsTel" />
          </view>
        </view>
      </view>
      <view class="item">
        <view>备注信息（150字以内）</view>
        <textarea v-model="mark"></textarea>
      </view>
    </view>
    <view class="wrapper">
      <view class="item">
        <view>支付方式</view>
        <view class="list">
          <view class="payItem acea-row row-middle" :class="active === 'weixin' ? 'on' : ''" @click="payItem('weixin')"
            v-show="isWeixin">
            <view class="name acea-row row-center-wrapper">
              <view class="iconfont icon-weixin2" :class="active === 'weixin' ? 'bounceIn' : ''"></view>微信支付
            </view>
            <view class="tip">微信快捷支付</view>
          </view>
          <view class="payItem acea-row row-middle" :class="active === 'weixin' ? 'on' : ''" @click="payItem('weixin')"
            v-show="!isWeixin">
            <view class="name acea-row row-center-wrapper">
              <view class="iconfont icon-weixin2" :class="active === 'weixin' ? 'bounceIn' : ''"></view>微信支付
            </view>
            <view class="tip">微信快捷支付</view>
          </view>
          <view class="payItem acea-row row-middle" :class="active === 'yue' ? 'on' : ''" @click="payItem('yue')">
            <view class="name acea-row row-center-wrapper">
              <view class="iconfont icon-icon-test" :class="active === 'yue' ? 'bounceIn' : ''"></view>余额支付
            </view>
            <view class="tip">可用余额：{{ userInfo.nowMoney || 0 }}</view>
          </view>
        </view>
      </view>
    </view>
    <view class="moneyList">
      <view class="item acea-row row-between-wrapper" v-if="orderPrice.totalPrice !== undefined">
        <view>商品总价：</view>
        <view class="money">￥{{ orderPrice.totalPrice }}</view>
      </view>
      <view class="item acea-row row-between-wrapper" v-if="orderPrice.payPostage > 0">
        <view>运费：</view>
        <view class="money">￥{{ orderPrice.payPostage }}</view>
      </view>
      <view class="item acea-row row-between-wrapper" v-if="orderPrice.couponPrice > 0">
        <view>优惠券抵扣：</view>
        <view class="money">-￥{{ orderPrice.couponPrice }}</view>
      </view>
      <view class="item acea-row row-between-wrapper" v-if="orderPrice.deductionPrice > 0">
        <view>积分抵扣：</view>
        <view class="money">-￥{{ orderPrice.deductionPrice }}</view>
      </view>
    </view>
    <view style="height:120rpx"></view>
    <view class="footer acea-row row-between-wrapper">
      <view>
        合计:
        <text class="font-color-red">￥{{ orderPrice.payPrice }}</text>
      </view>
      <view class="settlement" @click="createOrder">立即结算</view>
    </view>
    <CouponListWindow v-on:couponchange="changecoupon($event)" v-model="showCoupon" :price="orderPrice.totalPrice"
      :checked="usableCoupon.id" @checked="changeCoupon" :cartid="cartid"></CouponListWindow>
    <AddressWindow @checked="changeAddress" @redirect="addressRedirect" v-model="showAddress" :checked="addressInfo.id"
      ref="mychild"></AddressWindow>
  </view>
</template>
<style scoped lang="less">
  .order-submission .wrapper .shipping select {
    color: #999;
    padding-right: 0.15 * 100rpx;
  }

  .order-submission .wrapper .shipping .iconfont {
    font-size: 0.3 * 100rpx;
    color: #515151;
  }

  .order-submission .allAddress {
    width: 100%;
    background-image: linear-gradient(to bottom, #eb3729 0%, #eb3729 100%);
    background-image: -webkit-linear-gradient(to bottom,
        #eb3729 0%,
        #eb3729 100%);
    background-image: -moz-linear-gradient(to bottom, #eb3729 0%, #eb3729 100%);
    padding-top: 1 * 100rpx;
  }

  .order-submission .allAddress .nav {
    margin: 0 auto;
    padding: 0 30rpx;
    width: 100%;
    box-sizing: border-box;
  }

  .order-submission .allAddress .nav .item {
    flex: 1;
    position: relative;
  }

  .order-submission .allAddress .nav .item.on {
    position: relative;
  }

  .order-submission .allAddress .nav .item.on:before {
    position: absolute;
    bottom: 0;
    content: "快递配送";
    font-size: 0.28 * 100rpx;
    display: block;
    height: 0;
    left: 0;
    right: 0;
    border-width: 0.4 * 100rpx;
    border-style: solid;
    border-color: #fff;
    z-index: 9;
    text-align: center;
    line-height: 0.14 * 100rpx;
  }

  .order-submission .allAddress .nav .item:nth-of-type(2).on:before {
    content: "到店自提";
    border-width: 0.4 * 100rpx;
  }

  .order-submission .allAddress .nav .item.on2 {
    position: relative;
  }

  .order-submission .allAddress .nav .item.on2:before {
    position: absolute;
    bottom: 0;
    content: "到店自提";
    font-size: 0.28 * 100rpx;
    display: block;
    height: 0;
    left: 0;
    right: 0;
    border-width: 0.4 * 100rpx;
    border-style: solid;
    border-color: #d5e6e6;
    text-align: center;
    line-height: 0.14 * 100rpx;
  }

  .order-submission .allAddress .nav .item:nth-of-type(1).on2:before {
    content: "快递配送";
    border-width: 0.4 * 100rpx;
  }

  .order-submission .allAddress .address {
    width: 6.91 * 100rpx;
    height: 1.5 * 100rpx;
    margin: 0 auto;
    box-sizing: border-box;
  }

  .order-submission .allAddress .line {
    width: 7.1 * 100rpx;
    margin: 0 auto;
  }

  .order-submission .wrapper .item .discount input::placeholder {
    color: #ccc;
  }
</style>
<script>
  import OrderGoods from "@/components/OrderGoods";
  import CouponListWindow from "@/components/CouponListWindow";
  import AddressWindow from "@/components/AddressWindow";
  import {
    postOrderConfirm,
    postOrderComputed,
    createOrder
  } from "@/api/order";
  import {
    mapGetters
  } from "vuex";
  import {
    handleOrderPayResults,
    subscribeMessage
  } from "@/libs/order";
  import {
    weappPay
  } from "@/libs/wechat";
  import {
    isWeixin,
    handleErrorMessage
  } from "@/utils";

  const NAME = "OrderSubmission",
    _isWeixin = isWeixin();
  export default {
    name: NAME,
    components: {
      OrderGoods,
      CouponListWindow,
      AddressWindow,
    },
    props: {},
    data: function () {
      return {
        offlinePayStatus: 2,
        from: this.$deviceType,
        deduction: true,
        enableIntegral: true,
        enableIntegralNum: 0,
        isWeixin: _isWeixin,
        pinkId: 0,
        active: _isWeixin ? "weixin" : "yue",
        showCoupon: false,
        showAddress: false,
        addressInfo: {},
        couponId: 0,
        orderGroupInfo: {
          priceGroup: {},
        },
        usableCoupon: {},
        addressLoaded: false,
        useIntegral: false,
        orderPrice: {
          payPrice: "计算中",
        },
        mark: "",
        systemStore: {},
        shipping_type: 0,
        contacts: "",
        contactsTel: "",
        storeSelfMention: 0,
        cartid: "",
      };
    },
    computed: mapGetters(["userInfo", "storeItems"]),
    watch: {
      useIntegral() {
        this.computedPrice();
      },
      $yroute(n) {
        if (n.name === NAME) this.getCartInfo();
      },
      shipping_type() {
        this.computedPrice();
      },
    },
    onShow: function () {
      let that = this;
      this.$store.dispatch("getUser", true);
      that.getCartInfo();
      console.log(that.$yroute);
      if (that.$yroute.query.pinkid !== undefined) {
        that.pinkId = that.$yroute.query.pinkid;
      }
      if (that.$yroute.query.id !== undefined) {
        that.cartid = that.$yroute.query.id;
        console.log(that.cartid);
      }
    },
    methods: {
      showStoreList() {
        this.$store.commit("get_to", "orders");
        this.$yrouter.push({
          path: "/pages/shop/StoreList/index",
        });
      },
      addressType: function (index) {
        if (index && !this.systemStore.id) {
          uni.showToast({
            title: "暂无门店信息，您无法选择到店自提！",
            icon: "none",
            duration: 2000,
          });
          return;
        }
        console.log(this);
        this.shipping_type = index;
      },
      changeUseIntegral: function (e) {
        // this.computedPrice();
        this.useIntegral = e.mp.detail.value[0];
      },
      computedPrice() {
        let shipping_type = this.shipping_type;
        postOrderComputed(this.orderGroupInfo.orderKey, {
          addressId: this.addressInfo.id,
          useIntegral: this.useIntegral ? 1 : 0,
          couponId: this.usableCoupon.id || 0,
          shipping_type: parseInt(shipping_type) + 1,
        }).then((res) => {
          const data = res.data;
          if (data.status === "EXTEND_ORDER") {
            this.$yrouter.replace({
              path: "/pages/order/OrderDetails/index",
              query: {
                id: data.result.orderId,
              },
            });
          } else {
            this.orderPrice = data.result;
          }
        });
      },
      getCartInfo() {
        const cartIds = this.$yroute.query.id;
        if (!cartIds) {
          uni.showToast({
            title: "参数有误",
            icon: "none",
            duration: 2000,
          });
          return this.$yrouter.back();
        }
        postOrderConfirm(cartIds)
          .then((res) => {
            console.log(res, 999999);
            console.log(res.data.systemStore || {}, 999999);
            this.offlinePayStatus = res.data.offline_pay_status;
            this.orderGroupInfo = res.data;
            this.deduction = res.data.deduction;
            this.usableCoupon = res.data.usableCoupon || {};
            this.addressInfo = res.data.addressInfo || {};
            // 用来显示到店自提的店铺地址
            this.systemStore = res.data.systemStore || {};
            this.storeSelfMention = res.data.storeSelfMention;
            this.computedPrice();
          })
          .catch(() => {
            uni.showToast({
              title: "加载订单数据失败",
              icon: "none",
              duration: 2000,
            });
          });
      },
      addressTap: function () {
        this.showAddress = true;
        if (!this.addressLoaded) {
          this.addressLoaded = true;
          this.$refs.mychild.getAddressList();
        }
      },
      addressRedirect() {
        this.addressLoaded = false;
        this.showAddress = false;
      },
      couponTap: function () {
        this.showCoupon = true;
      },
      changeCoupon: function (coupon) {
        if (!coupon) {
          this.usableCoupon = {
            couponTitle: "不使用优惠券",
            id: 0,
          };
        } else {
          this.usableCoupon = coupon;
        }
        this.computedPrice();
      },
      payItem: function (index) {
        this.active = index;
      },
      changeAddress(addressInfo) {
        this.addressInfo = addressInfo;
        this.computedPrice();
      },
      createOrder() {
        let shipping_type = this.shipping_type;
        if (!this.active) {
          uni.showToast({
            title: "请选择支付方式",
            icon: "none",
            duration: 2000,
          });
          return;
        }
        if (!this.addressInfo.id && !this.shipping_type) {
          uni.showToast({
            title: "请选择收货地址",
            icon: "none",
            duration: 2000,
          });
          return;
        }

        if (this.shipping_type) {
          if (
            (this.contacts === "" || this.contactsTel === "") &&
            this.shipping_type
          ) {
            uni.showToast({
              title: "请填写联系人或联系人电话",
              icon: "none",
              duration: 2000,
            });
            return;
          }

          if (!/^1(3|4|5|7|8|9|6)\d{9}$/.test(this.contactsTel)) {
            uni.showToast({
              title: "请填写正确的手机号",
              icon: "none",
              duration: 2000,
            });
            return;
          }
          if (!/^[\u4e00-\u9fa5\w]{2,16}$/.test(this.contacts)) {
            uni.showToast({
              title: "请填写您的真实姓名",
              icon: "none",
              duration: 2000,
            });
            return;
          }
        }

        uni.showLoading({
          title: "生成订单中",
        });
        let from = {};
        if (this.$deviceType == "app") {
          from.from = "app";
        }
        // #ifdef MP-WEIXIN
        subscribeMessage()
        // #endif
        createOrder(this.orderGroupInfo.orderKey, {
            realName: this.contacts,
            phone: this.contactsTel,
            addressId: this.addressInfo.id,
            useIntegral: this.useIntegral ? 1 : 0,
            couponId: this.usableCoupon.id || 0,
            payType: this.active,
            pinkId: this.pinkId,
            seckillId: this.orderGroupInfo.seckill_id,
            combinationId: this.orderGroupInfo.combination_id,
            bargainId: this.orderGroupInfo.bargain_id,
            from: this.from,
            mark: this.mark || "",
            shippingType: parseInt(shipping_type) + 1,
            storeId: this.storeItems ? this.storeItems.id : this.systemStore.id,
            ...from,
          })
          .then((res) => {
            uni.hideLoading();
            handleOrderPayResults.call(this, res.data, "create", this.active);
          })
          .catch((err) => {
            handleErrorMessage(err, "创建订单失败");
          });
      },
    },
  };
</script>
